package com.dazhao.animejaphome.other;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


import com.allenliu.versionchecklib.core.AllenChecker;
import com.allenliu.versionchecklib.core.VersionParams;
import com.arialyy.aria.core.Aria;
import com.dazhao.animejaphome.home.VersionActivity;
import com.dazhao.animejaphome.httpservice.APIInterface;
import com.dazhao.animejaphome.home.animeResMVP.MVP_Contract;
import com.dazhao.animejaphome.home.animeResMVP.Presenter;
import com.dazhao.animejaphome.httpservice.NetResListJson;
import com.dazhao.animejaphome.bean.NetResListJsonBean;
import com.dazhao.animejaphome.R;
import com.dazhao.animejaphome.bean.VersionUpdateBean;
import com.dazhao.animejaphome.adapter.AnimeResAdapter;
import com.dazhao.animejaphome.myRxBus.DeleteLocalEvent;
import com.dazhao.animejaphome.myRxBus.RxBus;
import com.dazhao.animejaphome.other.DaggerMainActivity_MainComponent;
import com.gyf.barlibrary.ImmersionBar;

import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;

import javax.inject.Inject;

import dagger.Component;
import dagger.Module;
import dagger.Provides;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * 注意。该app没有用到该MainActivity，仅为存档以防止出错查错
 */



public class MainActivity extends AppCompatActivity implements MVP_Contract.View{//AppCompatActivity是带上标题栏的Activity
    RecyclerView recyclerView;
    LinearLayout bottom;
    AnimeResAdapter animeResAdapter;

    ArrayList<String> downloadNames;
    ArrayList<Long> downloadSizes;

    @Inject Presenter mPresenter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        ImmersionBar.with(this).init();//使导航栏透明
        getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.touming));

//注册下载器
        Aria.download(this).register();


        DaggerMainActivity_MainComponent.builder().mainModule(new MainModule(this)).build().inject(this);

        //调用Presenter方法加载数据

//        mPresenter=new Presenter(this);
        mPresenter.initItems();



//初始化动态数组

        downloadNames =new ArrayList<>();
        downloadSizes =new ArrayList<>();


//打开应用时会检查app是否更新
        getVersionJsonAndAskUpdate();

//打开应用时检测本地的资源情况，若为0则提示下载
        if(getPhoneData().size()==0){
            getResListJsonAndShowDialog();

        }


        //设置好删除数据的功能
        mPresenter.setDeleteFunction();







    }
    @Module
    public class MainModule {
        private final MVP_Contract.View mView;

        public MainModule(MVP_Contract.View view) {
            mView = view;
        }

        @Provides
        MVP_Contract.View provideView() {
            return mView;
        }
    }


    @Component(modules = MainModule.class)
    public interface MainComponent {
        void inject(MainActivity activity);
    }






    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.detach();
    }

    //实现View接口的方法
    @Override
    public void setAdapter(ArrayList<String> data) {
        //打开应用时,填充好recyclerView，使用recyclerView要先设置好layoutManager和adapter
        recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
        LinearLayoutManager layoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);


        recyclerView.setLayoutManager(layoutManager);
        animeResAdapter =new AnimeResAdapter(data,MainActivity.this);
        recyclerView.setAdapter(animeResAdapter);
        recyclerView.setItemAnimator(new DefaultItemAnimator());//插入的动画效果
    }
    //实现View接口的方法
    @Override
    public void setDeleteCallBack() {
        bottom=(LinearLayout)findViewById(R.id.main_bottom);


        findViewById(R.id.checkbox_all_orNot).setOnClickListener(new View.OnClickListener() {//全选或全不选的方法
            @Override
            public void onClick(View view) {
                Button b=(Button)view;

                ArrayList<CheckBox> checkBoxs= animeResAdapter.getCheckBoxs();

                if (b.getText().equals("全选")){
                    for (CheckBox checkBox:checkBoxs){
                        checkBox.setChecked(true);
                        checkBox.callOnClick();
                    }
                    b.setText("全不选");
                }else if(b.getText().equals("全不选")){
                    for (CheckBox checkBox:checkBoxs){
                        checkBox.setChecked(false);
                        checkBox.callOnClick();
                    }
                    b.setText("全选");
                }
            }
        });
        findViewById(R.id.checkbox_reversal).setOnClickListener(new View.OnClickListener() {//反选的方法
            @Override
            public void onClick(View view) {
                ArrayList<CheckBox> checkBoxs= animeResAdapter.getCheckBoxs();
                for (CheckBox checkBox:checkBoxs){
                    if(checkBox.isChecked()){
                        checkBox.setChecked(false);
                        checkBox.callOnClick();
                    }else{
                        checkBox.setChecked(true);
                        checkBox.callOnClick();
                    }
                }
            }
        });
        findViewById(R.id.checkbox_cancel).setOnClickListener(new View.OnClickListener() {//取消的方法
            @Override
            public void onClick(View view) {
                //全不选
                ArrayList<CheckBox> checkBoxs= animeResAdapter.getCheckBoxs();
                for (CheckBox checkBox:checkBoxs){
                    checkBox.setChecked(false);
                    checkBox.callOnClick();
                    checkBox.setVisibility(View.GONE);//使checkbox全部消失
                }

                //隐藏底部的四个按钮
                if(bottom!=null){
                    bottom.setVisibility(View.GONE);
                }
            }
        });


        findViewById(R.id.checkbox_delete).setOnClickListener(new View.OnClickListener() {//删除的方法
            @Override
            public void onClick(View view) {

                ArrayList<String> deleteDatas= animeResAdapter.getDeleteDatas();//mAdapter里根据check值生成了deleteDatas

                ArrayList<String> data= animeResAdapter.getData();


                //这里使用RxJava发送事件可能比较优雅
                for(int i=0, length=data.size();i<length;i++){
                    if(deleteDatas.contains(data.get(i))){

                        RxBus.getInstance().send(new DeleteLocalEvent(i));
//                        model.deleteLocal(i);//删除数据

                        animeResAdapter.notifyItemRemoved(i);//删除视图

                        length--;
                        i--;

                    }
                }
                //然后使视图gone
                ArrayList<CheckBox> checkBoxs= animeResAdapter.getCheckBoxs();
                for (CheckBox checkBox:checkBoxs){
                    checkBox.setChecked(false);
                    checkBox.callOnClick();
                    checkBox.setVisibility(View.GONE);//使checkbox全部消失
                }
                //隐藏底部的四个按钮
                if(bottom!=null){
                    bottom.setVisibility(View.GONE);
                }
            }
        });
    }
    //实现View接口的方法
    @Override
    public void resetView() {
        animeResAdapter.notifyDataSetChanged();
    }

    //填充菜单项
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.my_menu, menu);
        return true;
    }
//菜单项的监听
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.menu_delete) {
            //显示checkbox可供选择
            ArrayList<CheckBox> checkBoxs= animeResAdapter.getCheckBoxs();
            for (CheckBox checkBox:checkBoxs){
                checkBox.setVisibility(View.VISIBLE);
                checkBox.bringToFront();
            }
            //显示底部的四个按钮
            if(bottom!=null){
                bottom.setVisibility(View.VISIBLE);
                bottom.bringToFront();
            }
            return true;
        }
        if (id == R.id.menu_version_information) {
            startActivity(new Intent(this,VersionActivity.class));
            return true;
        }
//        if (id == R.id.menu_soso) {
//            return  true;
//        }
        if (id == R.id.menu_update) {//更新资源的方法
            getResListJsonAndShowDialog();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

//拦截返回键的事件,当为用户执行删除操作时，不要退出程序,同时使底部消失
    @Override
    public void onBackPressed() {
        if(bottom.getVisibility()==View.VISIBLE){
            //全不选
            ArrayList<CheckBox> checkBoxs= animeResAdapter.getCheckBoxs();
            for (CheckBox checkBox:checkBoxs){
                checkBox.setChecked(false);
                checkBox.callOnClick();
                checkBox.setVisibility(View.GONE);//使checkbox全部消失
            }
            //隐藏底部的四个按钮
            if(bottom!=null){
                bottom.setVisibility(View.GONE);
            }
            return;
        }
        super.onBackPressed();
    }

//    //下载完成后,刷新资源
//    @DownloadGroup.onTaskComplete() protected void complete(DownloadGroupTask task){
////        Toast.makeText(MainActivity.this, "任务已完成"+task.getKey(), Toast.LENGTH_SHORT).show();
//        String path=task.getEntity().getDirPath();//这里的是一个cache的路径，下载完成后应该从cache剪切到files/Res
//        File dirCache=new File(path);
//        String pathMoveTo =path.replace(MainActivity.this.getExternalCacheDir().getAbsolutePath(),MainActivity.this.getExternalFilesDir("Res")+"/");//将cache的路径替换为files的路径
//
//        File dirMoveTo=new File(pathMoveTo);
//        dirCache.renameTo(dirMoveTo);
//        dirCache.delete();
//
//
//
//        //String fileName =path.replace(MainActivity.this.getExternalFilesDir("Res")+"/","");//取得下载到的文件名,6位数
//
//        mPresenter.resetDataView();//刷新数据和视图
//
//
//
//
//
//    }


//获得手机外部存储里已经存在的资源名列表
    private ArrayList<String> getPhoneData(){
        File json,jpg,mp4;
        ArrayList<String> arrayList=new ArrayList<>();

        String path = getExternalFilesDir("Res").getAbsolutePath();
        File file=new File(path);
        File[] files=file.listFiles();//该目录下包含多个资源组的文件夹
        if(files!=null){//刚开始资源有可能为空，造成空指针错误
            for(File resName:files){
                if(resName.isDirectory()){//资源组应该是一个包含三个文件的文件夹
                    //若果该文件夹存在三个文件MP4，jpg，json
                    json=new File(resName.getAbsolutePath()+"/"+resName.getName()+".json");
                    jpg =new File(resName.getAbsolutePath()+"/"+resName.getName()+".jpg");
                    mp4 =new File(resName.getAbsolutePath()+"/"+resName.getName()+".mp4");
                    if(json.exists()&&jpg.exists()&&mp4.exists()){//则应该存入资源名到data
                        arrayList.add(resName.getName());
                    }else {
                        //暂时不处理,说明该文件夹下某些资源被用户删除
                    }
                }else {
                    //Res目录下有文件的情况
                }
            }
        }else {//资源为空的情况，应该提示用户下载

        }

        return arrayList;
    }

//获得当前的版本码
    private int getVersionCode() {
        // PackageManager管理器
        PackageManager pm = getPackageManager();
        // 获取相关信息
        try {
            PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
            // 版本号
            int version = packageInfo.versionCode;
            return version;
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return 0;

    }



    //测试是否可以用反射
    //展示一个用于选择性下载的Dialog。resLists代表服务器的资源列表，互为循环，这个初始全true
    private   void showDownloadChoiceDialogTrueTest(final String[] resLists){
        //按奇偶分出两个字符数组，0为名，1为大小
        final ArrayList<String> resNames=new ArrayList<>();//该数组用于给出下载的url
        final ArrayList<Long> resSizes=new ArrayList<>();//该数组用于给下下载的大小
        for(int i=0;i<resLists.length;i++ ){
            if(i%2==0){
                resNames.add(resLists[i]);
            }else {
                resSizes.add(Long.parseLong(resLists[i])*1024);
            }
        }
        //根据本地资源对下载的列表进行减少
        ArrayList<String> phoneData= getPhoneData();
        for(String string:phoneData){
            if(resNames.contains(string)){
                int index=resNames.indexOf(string);
                resNames.remove(index);
                resSizes.remove(index);
            }
        }
        //如果没有更新资源，退出该方法，并提升没有更新
        if(resNames.size()==0){
            Snackbar.make(MainActivity.this.getCurrentFocus(),"没有资源更新",Snackbar.LENGTH_SHORT).show();
            return;
        }
        
        final String[] resNamesArray=resNames.toArray(new String[resNames.size()]);

        // 设置默认选中的选项，全为false默认均未选中,应该设置为全部true
        final   boolean[]   initChoiceSets=new boolean[resNamesArray.length];//全false
        final   boolean[]   initChoiceSetsTrue=new boolean[resNamesArray.length];//全true
        for(int i=0;i<initChoiceSets.length;i++){
            initChoiceSetsTrue[i]=true;
        }

        downloadNames.clear();//这两个一开始也要满的
        for(String string:resNames){
            downloadNames.add(string);
        }
        downloadSizes.clear();
        for(Long l:resSizes){
            downloadSizes.add(l);
        }
        final AlertDialog.Builder multiChoiceDialog = new   AlertDialog.Builder(MainActivity.  this  );



        final View custom=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_custom,null);
        final TextView textView=custom.findViewById(R.id.text);
        long sum=0;
        for(Long i :downloadSizes){
            sum+=i;
        }
        textView.setText("总大小为"+bToKBorMB(sum));//总大小的值必须能跟随变化



        //setCustomTitle的方法入参是一个view，也就是说可以拿到view的引用，从而动态的改变view
        multiChoiceDialog.setCustomTitle(custom);


        final DialogInterface.OnMultiChoiceClickListener jt=new   DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public   void   onClick(DialogInterface dialog,   int   which,
                                    boolean   isChecked) {
                if   (isChecked) {
                    downloadNames.set(which,resNames.get(which));
                    downloadSizes.set(which,resSizes.get(which));
                    //downloadNames.add(resNames.get(which));
                    //downloadSizes.add(resSizes.get(which));//动态add也是在尾部插入，影响顺序
                    long sum=0;
                    for(Long i :downloadSizes){
                        if(i!=null){
                            sum+=i;
                        }
                    }
                    textView.setText("总大小为"+bToKBorMB(sum));//总大小的值必须能跟随变化

                }   else   {//为什么会调用这个？？
                    downloadNames.set(which,null);
                    downloadSizes.set(which,null);
                    //downloadNames.remove(which);
                    //downloadSizes.remove(which);//动态数组增加减少都会影响顺序，特别是从中间减少
                    long sum=0;
                    for(Long i :downloadSizes){
                        if(i!=null){
                            sum+=i;
                        }
                    }
                    textView.setText("总大小为"+bToKBorMB(sum));//总大小的值必须能跟随变化
                }
            }
        };




        //复选框的设置，传入的第一个参数必须是数组类型
        multiChoiceDialog.setMultiChoiceItems(resNamesArray, initChoiceSetsTrue,jt);
        multiChoiceDialog.setNeutralButton("全选", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                // 直接调用监听器和手指点击触发的不一样,钩子没有取消,让该方法只运行一次不与其他矛盾

                try{
                    //首先不让关闭
                    Field mShowing=dialogInterface.getClass().getSuperclass().getSuperclass().getDeclaredField("mShowing");
                    mShowing.setAccessible(true);
                    mShowing.set(dialogInterface,false);
                    //要获得mListView的实例
                    Field mAlert=dialogInterface.getClass().getDeclaredField("mAlert");
                    mAlert.setAccessible(true);
                    Object mAlertIns=mAlert.get(dialogInterface);

                    Field mListView=mAlertIns.getClass().getDeclaredField("mListView");
                    mListView.setAccessible(true);
                    ListView mListViewIns=(ListView) mListView.get(mAlertIns);
//                    Toast.makeText(MainActivity.this, "获得了listView的实例", Toast.LENGTH_SHORT).show();


//                    Toast.makeText(MainActivity.this, "获得了adapter的实例", Toast.LENGTH_SHORT).show();



//                    Field P=multiChoiceDialog.getClass().getDeclaredField("P");
//                    P.setAccessible(true);
//                    Object PIns=P.get(multiChoiceDialog);
//                    Toast.makeText(MainActivity.this, "P", Toast.LENGTH_SHORT).show();
//
//
//                    Field mCheckedItems=PIns.getClass().getDeclaredField("mCheckedItems");
//                    Toast.makeText(MainActivity.this, "获得了checkedItem的字段", Toast.LENGTH_SHORT).show();
//                    mCheckedItems.setAccessible(true);
//                    boolean[] mCheckedItemsIns=(boolean[])mCheckedItems.get(PIns);
//                    Toast.makeText(MainActivity.this, "获得了checkedItem的实例", Toast.LENGTH_SHORT).show();//该项应该能动态改变选中状态

//                    ListAdapter listAdapter=mListViewIns.getAdapter();

                    //写一个全选的方法,而且该方法应该仅能执行一次
                    int all=resNamesArray.length;//总数,为multiChoiceButton的传入参数
                    for (int position=0;position<all;position++){
                        //这个能打上勾但不触发事件,打上勾后触发的事件为肯定状态,必须先打钩,
                        mListViewIns.setItemChecked(position,true); //实际某项的checked被设置后，会触发打钩事件，接下来就应该调用onItemClick事件
                        //有效但没有打钩,会选中某项，根据checked的值一直增或减
                        mListViewIns.getOnItemClickListener().onItemClick(mListViewIns,mListViewIns.getRootView(),position,mListViewIns.getItemIdAtPosition(position));

                    }//有可能引发错误。因为是全选，若果已经是选中的状态，也会被选一次
                    //没有出错。应该是自检了状态。






                }catch (NoSuchFieldException e){
                    e.printStackTrace();
                }catch (IllegalAccessException e){
                    e.printStackTrace();
                }



            }
        });
        multiChoiceDialog.setNegativeButton("全不选", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                try{
                    //首先不让关闭
                    Field mShowing=dialogInterface.getClass().getSuperclass().getSuperclass().getDeclaredField("mShowing");
                    mShowing.setAccessible(true);
                    mShowing.set(dialogInterface,false);
                    //要获得mListView的实例，先获得mAlert
                    Field mAlert=dialogInterface.getClass().getDeclaredField("mAlert");
                    mAlert.setAccessible(true);
                    Object mAlertIns=mAlert.get(dialogInterface);

                    Field mListView=mAlertIns.getClass().getDeclaredField("mListView");
                    mListView.setAccessible(true);
                    ListView mListViewIns=(ListView) mListView.get(mAlertIns);



                    int all=resNamesArray.length;//总数,为multiChoiceButton的传入参数
                    for (int position=0;position<all;position++){
                        //这个能打上勾但不触发事件,打上勾后触发的事件为肯定状态,必须先打钩,
                        mListViewIns.setItemChecked(position,false); //实际某项的checked被设置后，会触发打钩事件，接下来就应该调用onItemClick事件
                        //有效但没有打钩,会选中某项，根据checked的值一直增或减
                        mListViewIns.getOnItemClickListener().onItemClick(mListViewIns,mListViewIns.getRootView(),position,mListViewIns.getItemIdAtPosition(position));

                    }




                }catch (NoSuchFieldException e){
                    e.printStackTrace();
                }catch (IllegalAccessException e){
                    e.printStackTrace();
                }

            }
        });

        multiChoiceDialog.setPositiveButton(  "确定"  ,
                new   DialogInterface.OnClickListener() {
                    @Override
                    public   void   onClick(DialogInterface dialog,   int   which) {//which的参数在这里好像没有意义
                        try{
                            Field mShowing=dialog.getClass().getSuperclass().getSuperclass().getDeclaredField("mShowing");
                            mShowing.setAccessible(true);
                            mShowing.set(dialog,true);//让dialog能够关闭
                        }catch (Exception e){}
                        //去除downloadSizes和downloadNames的空值
                        ArrayList<?> nullList=new ArrayList<Object>();
                        nullList.add(null);
                        downloadNames.removeAll(nullList);
                        downloadSizes.removeAll(nullList);
                        for(int i = 0; i< downloadNames.size(); i++){//取得resName的一个子项，作为下载地址，循环
                            ArrayList<String> urls=new ArrayList<>();
                            String head="http://114.67.131.62/AnimeJap/Res";
                            urls.add(head+"/"+ downloadNames.get(i)+"/"+downloadNames.get(i)+".json");
                            urls.add(head+"/"+downloadNames.get(i)+"/"+downloadNames.get(i)+".jpg");
                            urls.add(head+"/"+downloadNames.get(i)+"/"+downloadNames.get(i)+".mp4");

                            String groupDirPath=MainActivity.this.getExternalCacheDir()+"/"+downloadNames.get(i);
                            Aria.download(MainActivity.this)
                                    .load(urls)     //设置一主任务，参数为List<String>
                                    .setDownloadDirPath(groupDirPath)    //设置任务组的文件夹路径
                                    /**
                                     * 任务组总任务大小，任务组是一个抽象的概念，没有真实的数据实体，任务组的大小是Aria动态获取子任务大小相加而得到的，
                                     * 如果你知道当前任务组总大小，你也可以调用该方法给任务组设置大小
                                     *
                                     * 为了更好的用户体验，建议直接设置任务组文件大小
                                     */
                                    .setFileSize(downloadSizes.get(i))
                                    .start();   //启动下载

                        }
                    }
                });


        //final AlertDialog alertDialog=multiChoiceDialog.create();//AlertDialog有更多的属性


        multiChoiceDialog.show();//差点忘记展示了

    }


//单位转换,附加单位，传入的参数为下载的总大小,仅展示给用户看,没有小数点。。
    private String bToKBorMB(long l){//这个是字母l
        long lKB,lMB;
        lKB=l>>10;//右移十位就是除以1024
        lMB=lKB>>10;//猜测若超位（不足1MB）的情况时应该为0

        if(lMB==0){
            return lKB+"KB";
        }else {
            float f=(float)lKB/1024;
            return String.format("%.2f", f).toString()+"MB";
        }
    }




//版本更新的代码
    public void getVersionJsonAndAskUpdate(){

        Retrofit retrofit= new Retrofit.Builder()
                .baseUrl("http://114.67.131.62/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        APIInterface service = retrofit.create(APIInterface.class);

        Call<VersionUpdateBean> model = service.repo("VersionUpdate.json");//至此创建了一个 get请求 的对象

        model.enqueue(new Callback<VersionUpdateBean>() {//发送请求
            @Override
            public void onResponse(Call<VersionUpdateBean> call, Response<VersionUpdateBean> response) {
                //Toast.makeText(MainActivity.this, ""+response.body().getContent(), Toast.LENGTH_SHORT).show();

                int versionCode = response.body().getVersionCode();
                String versionName = response.body().getVersionName();
                String content = response.body().getContent();
                String url = response.body().getUrl();
                // 版本判断
                if (versionCode > getVersionCode()) {
                    // 提示更新
//                            Toast.makeText(MainActivity.this, "可以更新", Toast.LENGTH_SHORT).show();
                    //新版本的下载以及显示信息
                    VersionParams.Builder builder = new VersionParams.Builder();
                    builder.setOnlyDownload(true)
                            .setDownloadUrl(url)
                            .setDownloadAPKPath(getExternalCacheDir().getPath())
                            .setTitle("检测到新版本" + versionName)
                            .setUpdateMsg(content + "\n\n是否要更新？");
                    AllenChecker.startVersionCheck(MainActivity.this, builder.build());
                }
            }

            @Override
            public void onFailure(Call<VersionUpdateBean> call, Throwable t) {
                System.out.print(t.getMessage());
            }
        });

    }
//供用户选择性下载的代码
    public void getResListJsonAndShowDialog(){
        Retrofit retrofit= new Retrofit.Builder()
                .baseUrl("http://114.67.131.62/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        NetResListJson service = retrofit.create(NetResListJson.class);

        Call<NetResListJsonBean> model = service.repo("ResList.json");//至此创建了一个 get请求 的对象

        model.enqueue(new Callback<NetResListJsonBean>() {//发送请求
            @Override
            public void onResponse(Call<NetResListJsonBean> call, Response<NetResListJsonBean> response) {
                //取出json中ResList的值
                String resList = response.body().getResList();
                //分割开ResList
                String[] resLists =resList.split(",");
                //应该把全部资源列表传给Dialog让用户选择性下载

//                    showDownloadChoiceDialogTrue(resLists);
                showDownloadChoiceDialogTrueTest(resLists);
            }

            @Override
            public void onFailure(Call<NetResListJsonBean> call, Throwable t) {
                Log.d("onFailure",t.getMessage());
                Toast.makeText(MainActivity.this, "请求失败"+t.getMessage(), Toast.LENGTH_SHORT).show();//通常是因为服务端json格式不正确
            }
        });
    }






}
